\section{Empfang, Verarbeitung und Auswertung der Daten (Android-App)}
Um die hardwareseitig ermittelten Daten dauerhaft zu speichern und zu visualisieren, wurde eine Anwendung für das Android Betriebssystem entwickelt. Da die Daten über das GSM-Netz an einen Empfänger geschickt werden sollen, bietet sich ein Smartphone als Empfangsgerät an. Android ist ein weitverbreitetes Betriebssystem für Smartphones und bietet damit einen breiten Nutzerkreis für die Anwendung. Außerdem fallen bei der Entwicklung keinerlei Lizenzgebühren an und die Entwicklung kann auf jedem Computer und Betriebssystem vorgenommen werden.
Als Entwicklungsumgebung kam Eclipse mit dem Android Development Tools Plugin (ADT) zum Einsatz. Dieses wird dafür speziell von Google zur Verfügung gestellt und bietet eine hervorragende Unterstützung für den Entwickler. Dazu zählen u.a. die Möglichkeit, den Code zu debuggen und die Anwendung direkt auf dem Handy oder einem Emulator zu starten. Dafür muss im Smartphone der Debug-Modus eingestellt sein und die Installation von Dritt-Anbietern erlaubt werden.
\subsection{Benutzeroberfläche}
Für die Erstellung der Benutzeroberfläche bietet das ADT Plugin einen visuellen Editor, der einem die Arbeit erleichtert, häufig jedoch an seine Grenzen stößt und manuell am Code angepasst werden muss.
Die App besteht aus 3 Views, dem Startbildschirm, der grafischen Auswertung und der tabellarischen Auswertung.

\begin{figure}[h]
	\centering
  \includegraphics[width=0.4\textwidth]{bilder/Startseite_Android.jpg}
	\captionof{figure}{Startbildschirm der App}
	\label{fig:Startbildschirm der App}
\end{figure}



Auf dem Startbildschirm hat man die Möglichkeit den Zeitraum, über den die Auswertung angezeigt wird, auszuwählen. Ist dieser gewählt, kann man entweder in die tabellarische Auswertung oder die grafische Auswertung wechseln.

\begin{figure}[h]
	\centering
  \includegraphics[width= 0.4\textwidth]{bilder/Tabelle_Android.jpg}
	\captionof{figure}{Tabellarische Ansicht der App}
	\label{fig:Tabellarische Ansicht der App}
\end{figure}


In der Tabellen-View werden der niedrigste und der höchste gemessene Wert, sowie der Median und der Durchschnittswert über den eingegebenen Zeitraum angezeigt.

\begin{figure}[h]
	\centering
\includegraphics[width=0.8\textwidth]{bilder/Graph_Android.jpg}
	\captionof{figure}{Grafische Ansicht der App}
	\label{fig:Grafische Ansicht der App}
\end{figure}


In der Diagramm-View bekommt der Benutzer eine schöne Visualisierung der Daten präsentiert.

\subsection{Empfang der Daten}
\subsubsection{Lesen der SMS}
Die Daten werden per SMS vom Gerät empfangen. Die Nummer des Senders muss vorher im Programm eingestellt werden. Nach jedem Start der Anwendung wird die Datenbank nach neuen SMS des eingestellten Senders durchsucht. Dies kann anhand des mitgesendeten Zeitstempels überprüft werden. Die gelesenen SMS können wahlweise auch gleich gelöscht werden.
Wurden neue SMS gefunden, werden diese nacheinander gelesen und für die Weiterverarbeitung konvertiert. Der relevante Code für diese Arbeit sieht wie folgt aus:
\lstset{language=Java}
\begin{lstlisting}
// Timestamp parsen, jeweils 2 Zeichen als HexString Sek|Min|Std|Tag|Monat|Jahr
int sec = Integer.parseInt(bodyText.substring(0, 2), 16);
int min = Integer.parseInt(bodyText.substring(2, 4), 16);
int hour = Integer.parseInt(bodyText.substring(4, 6), 16);
int day = Integer.parseInt(bodyText.substring(6, 8), 16);
int month = Integer.parseInt(bodyText.substring(8, 10), 16);
int year = Integer.parseInt(bodyText.substring(10, 12), 16);
Date timeStamp = sdf.parse(String.valueOf(year) + "-"
		+ String.valueOf(month) + "-"
		+ String.valueOf(day) + " "
		+ String.valueOf(hour) + ":"
		+ String.valueOf(min) + ":"
		+ String.valueOf(sec));
int values[] = new int[24];

// die 24 Werte auslesen, jeweils 4 Zeichen HexString
for (int n = 12, c = 0; n+4 < 109; n += 4, c++) {
	values[c] = Integer.parseInt(bodyText.substring(n, n+4),16);
}
\end{lstlisting}
\subsubsection{Speichern in der Datenbank}
Nachdem aus der Zeichenkette nun ein Date-Object und eine Array mit int-Werten gelesen wurde, müssen die Daten in der Datenbank persistiert werden.
Android stellt dafür eine SQLite Datenbank zur Verfügung, die über Android Helper-Klassen angesprochen werden kann. Als Sprache wird dabei natives SQL, mit ein paar spezifischen Anpassungen für SQLite, eingesetzt.
\lstset{language=Java}
\begin{lstlisting}
SQLiteOpenHelper database = new SMSDatabaseHelper(this);
SQLiteDatabase connection = database.getWritableDatabase();
for (int i = 0; i < values.length; i++) {
	connection
			.execSQL("insert into sms(dateField, value) values ("
					+ timeStamp.getTime() + ", " + values[i] + ")");
}

connection.close();
\end{lstlisting}

Die Datenbank hat eine Tabelle "sms" mit 3 Feldern. Die "id" identifiziert einen Eintrag eindeutig und wird automatisch generiert, das Datum der SMS wird in der Spalte "dateField" als long gespeichert und unter "value" befindet sich der Spannungswert als int.
\subsection{Auswertung der Daten}
Die Daten werden innerhalb des gewählten Zeitraums aus der Datenbank gelesen und pro Tag in ein Objekt gespeichert. In diesem Objekt findet dann die Umrechnung in das gewünschte Zielsystem statt (z.B. Spannung in Energie).
Anschließend wird über die Werte im Zeitraum iteriert und der min und max Wert ermittelt. Zur Bestimmung des Mean und Median gibt es zwei Algorithmen, die sich in einer Helper-Klasse befinden.
Mean:
\lstset{language=Java}
\begin{lstlisting}
double sum = 0;
for (int i = 0; i < m.length; i++) {
	sum += m[i];
}
return sum / m.length;
\end{lstlisting}
Median:
\lstset{language=Java}
\begin{lstlisting}
if (m.length > 0){
	int middle = m.length / 2;
	if (m.length % 2 == 1) {
		return m[middle];
	} else {
		return (m[middle - 1] + m[middle]) / 2.0;
	}
}
return 0;
\end{lstlisting}
\subsubsection{Diagramm}
Für die grafische Auswertung kommt eine Library zur Darstellung von Diagrammen in Android zum Einsatz. Der Name der Library ist AChartEngine und bietet eine Auswahl verschiedener Diagrammtypen. Für die Auswertung kommt ein Liniendiagramm zum Einsatz. Die X-Achse wird nach Tagen und Stunden unterteilt, die Y-Achse stellt das Zielsystem dar. Beide Achsen werden dynamisch beschriftet. Das Diagramm bietet außerdem die Möglichkeit zu scrollen und zu verschieben.
Neben einer Kurve für die eigentlichen Werte, werden der Mean und der Median mit einer Linie dargestellt. 
\subsubsection{Tabelle}
In der Tabelle werden ebenfalls die relevanten Werte Min, Max, Mean und Median angezeigt.
\subsection{Weitere Eigenschaften}
Die App ist lauffähig ab Android in der Version 2.0 und fordert vom Benutzer die Rechte ''SMS lesen'' und ''Kontakte lesen''.
\subsection{Stand}
Die App befindet sich aktuell noch im Prototypen-Status. Das bedeutet, dass alle wichtigen Features implementiert sind, zusätzliche Features (wie z.B. die Einstellungen) und ein schöneres UI jedoch noch nachgearbeitet werden müssen.








